#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
@Project : ailearning
@File : rag_base_index_simple.py
@Author : 李峰
@Date : 2025/9/23 17:41
@Software: PyCharm
说明：RAG 基础步骤 索引
嵌入>索引>对【索引】后的嵌入向量计算相似度
'''
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_openai import ChatOpenAI
import numpy as np

llm = ChatOpenAI(model_name='qwen-plus', base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", temperature=0.5,
                 api_key="sk-7b4f290b1a3e42a1a9a1957fa44eff37")
# --------------简单的一段话-----------------------
# 1、前置准备：文件
question = "什么是人工智能？"
document1 = "人工智能（Artificial Intelligence），英文缩写为AI，是新一轮科技革命和产业变革的重要驱动力量"
document2 = "接口自动化测试，英文缩写为API Automated Testing，是软件测试行业的重要改革"
#2、# 词嵌入转化（翻译）
embd=DashScopeEmbeddings(
    model="text-embedding-v1", dashscope_api_key="sk-7b4f290b1a3e42a1a9a1957fa44eff37"
)
query_result = embd.embed_query(question)
document_result1 = embd.embed_query(document1)
document_result2 = embd.embed_query(document2)
# print(f"问题嵌入，嵌入向量长度：{len(query_result)}\n详细数值：{query_result}")
# print(f"文本嵌入，嵌入向量长度：{len(document_result1)}\n详细数值：{document_result1}")
# print(f"文本嵌入，嵌入向量长度：{len(document_result2)}\n详细数值：{document_result2}")

# 3、利用余弦相似函数计算相似度
# 第一组合
dot_product = np.dot(query_result, document_result1)
norm_vec1 = np.linalg.norm(query_result)
norm_vec2 = np.linalg.norm(document_result1)
similarity1=dot_product / (norm_vec1 * norm_vec2)

# 第二组合
dot_product2 = np.dot(query_result, document_result2)
norm_vec3 = np.linalg.norm(document_result2)
similarity2=dot_product / (norm_vec1 * norm_vec3)
print(f"第一组文档与问题的余弦相似度:{similarity1}")
print(f"第二组文档与问题的余弦相似度:{similarity2}")
# --------------简单的一段话-----------------------
